/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import controlador.CtrlPersistencia;
import javax.persistence.Column;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;

// import javax.persistence.ManyToOne;

/**
 *
 * @author diego
 */
@Entity
public class Seccion implements Serializable , Comparable {
    
    @Id    
    @Column(name="SECCION_ID")
    private Integer id;
    
    @Basic
    private String codigo;    
        
    @OneToMany(mappedBy="seccion")
    @JoinTable(name="SECCION_FILA",joinColumns={@JoinColumn(name="SECCION_ID", referencedColumnName="SECCION_ID")},inverseJoinColumns={@JoinColumn(name="FILA_ID",referencedColumnName="FILA_ID", unique=true)})
    private Set<Fila> filas;
    
    @Basic
    private boolean estado;    
    
    @ManyToOne
    @JoinColumn(name="SALA_ID")
    private Sala sala;
    

    public Seccion() {
    }

    public Seccion(Integer id,String codigo,Sala sala) {        
        this.codigo = codigo; 
        this.id = id;
        this.filas = new HashSet();        
        this.estado = true;        
        this.sala = sala;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }
  
    public Set<Fila> getFilas() {
        return filas;
    }

    public void setFilas(Set<Fila> filas) {
        this.filas = filas;
    }

    public boolean isEstado() {
        return estado;
    }

    public void setEstado(boolean estado) {
        this.estado = estado;
    }    
    public void deshabilitar(){
        this.setEstado(false);
    }
    public void habilitar(){
        this.setEstado(true);
    }

    public Sala getSala(){
        return sala;
    }

    
    public void setSala(Sala sala) {
        this.sala = sala;
    }

    public void quitarfilas() {
        Fila unaFila;
        Iterator it = this.filas.iterator();
        while(it.hasNext()){
            unaFila = (Fila) it.next();
            unaFila.quitarButacas();
            //  this.filas.remove(unaFila);
            unaFila.deshabilitar();
        }
    }
    
    public Set<Fila> obtenerFilas(){
        Set<Fila> lista;
        lista = CtrlPersistencia.listaDeFilas(this);
        this.setFilas(lista);
        return lista;
    }
    public Set<Fila> obtenerFilasActivas(){
        Set<Fila> lista;
        lista = CtrlPersistencia.listaDeFilasActivas(this);
        this.setFilas(lista);
        return lista;
    }
    
    public void agregarFila(String unNro) throws Exception{
        Integer id = CtrlPersistencia.maxFilaId() + 1;
        Fila unaFila = new Fila(id,unNro, this);
        this.filas.add(unaFila);        
        CtrlPersistencia.crearFila(unaFila);
        CtrlPersistencia.modificarSeccion(this);
    }
    
    @Override
    public String toString(){
        return this.codigo;
    }

    @Override
    public int compareTo(Object o) {
        Seccion seccion = (Seccion) o;
        return this.getCodigo().compareTo(seccion.getCodigo());
    }
    
    public int capacidad(){
        int salida = 0;
        for (Fila fil : this.filas) {
            salida = salida + fil.capacidad();            
        }
        return salida;
    }
}
